package com.jdy.utils;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/**
 * Spring 框架学习
 * <p>
 * Description: spring-mvc
 * <p>
 * Created by 49897 on 2020/4/3 19:03
 */
public class FileUtils {

    /**
     *
     */
    static final char EXTENSION_SEPARATOR = '.';

    /**
     * 获取文件名称
     *
     * @param path 文件路径
     * @return 文件名称
     */
    public static String getFileName(String path) {
        if (path == null) return null;
        int separatorIndex = path.lastIndexOf(File.separator);
        return separatorIndex == -1 ? path : path.substring(separatorIndex + 1);
    }

    public static String clearSuffix(String fileName) {
        if (fileName == null || fileName.isEmpty()) return fileName;

        int dot = fileName.lastIndexOf(".");
        if (dot < 0) return fileName;

        return fileName.substring(0, dot);
    }


    /**
     * 生成一个相对路径+
     *
     * @param path         原文件路径
     * @param relativePath 相对文件名称
     * @return 相对文件路径
     */
    public static String applyRelativePath(String path, String relativePath) {
        int separatorIndex = path.lastIndexOf(File.separator);
        if (separatorIndex == -1) return relativePath;
        String newPath = path.substring(0, separatorIndex);
        return newPath + (relativePath.startsWith(File.separator) ? "" : File.separator) + relativePath;
    }

    /**
     * 读取Excel文件中的内容
     *
     * @param <T>      对象类型
     * @param pathName Excel文件
     * @param head     读取到的Excel文件内容转换成Java对象类
     * @param consumer 消费者，用来处理读取Excel文件后的java对象
     */
    public static <T> void readExcel(String pathName, Class<T> head, Consumer<List<T>> consumer) {
        EasyExcel.read(pathName, head, new AnalysisEventListener<T>() {
            private final List<T> list = new ArrayList<>();

            /**
             * 这个每一条数据解析都会来调用
             * @param data 数据
             * @param context 环境
             */
            @Override
            public void invoke(T data, AnalysisContext context) {
                list.add(data);
            }

            /**
             * 所有数据解析完成了 都会来调用
             * @param context 环境
             */
            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                consumer.accept(list);
            }
        }).sheet().doRead();
    }

    public static void main(String[] args) {
//        List<Path> list = new ArrayList<>();
//        list.add(Paths.get("E:/Temp/A"));
//        list.add(Paths.get("E:/Temp/B"));
//
//        try {
//            WatchService watchService = FileSystems.getDefault().newWatchService();
//            for (Path path : list) {
//                path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
//                        StandardWatchEventKinds.ENTRY_DELETE);
//            }
//            WatchKey key;
//            while ((key = watchService.take()) != null){
//                for (WatchEvent<?> event : key.pollEvents()) {
//                    System.out.println(event.context() + " 文件触发： "  + event.kind().name());
//                }
//                if (!key.reset()) break;
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        List<Map<String, Object>> list = new ArrayList<>();
//        String file = "E:\\Temp\\0519\\DS31032B-A-A-333-003-4-39-75_2020.05.13_18_20_29.dat";
//        try {
//            BufferedReader in = new BufferedReader(new FileReader(file));
//            String cureent, pre = null;
//            Map<String, Object> map = null;
//            while ((cureent = in.readLine()) != null) {
//                String[] split = cureent.split(",");
//                if (cureent.startsWith("EFL")) {
//                    map = new HashMap<>();
//                    map.put(split[0], split[1]);
//                }
//
//                if (cureent.startsWith("FFL")) {
//                    if (map == null) map = new HashMap<>();
//                    map.put(split[0], split[1]);
//                }
//
//                if (cureent.startsWith("Step1")) {
//                    if (map == null) map = new HashMap<>();
//                    Map<String, Object> stepMap = new HashMap<>();
//                    String key = null;
//                    for (int i = 1; i < split.length; i++) {
//                        if (pre == null) {
//                            key = "" + i;
//                        } else if (pre.startsWith("Sag")) {
//                            key = "S" + i;
//                        } else if (pre.startsWith("Tan")) {
//                            key = "T" + i;
//                        }
//                        stepMap.put(key, split[i]);
//                    }
//
//                    if (pre == null) {
//                        System.out.println(list);
//                    } else if (pre.startsWith("Sag")) {
//                        map.put("Sag", stepMap);
//                    } else if (pre.startsWith("Tan")) {
//                        map.put("Tan", stepMap);
//                        list.add(map);
//                    }
//                }
//                pre = cureent;
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//        System.out.println(list);
    }
}
